﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SimpleData.Infrastructure.Plugins;
using SimpleData.Infrastructure.Serialization;
using SimpleData.ObjectModel.Rules;

namespace SimpleData.ObjectModel.Design
{

	/// <summary>
	/// Instância do objeto que irá converter os metadados da <see cref="Rule"/> em código ou
	/// funções lambdas para serem interpretadas pelo sistema
	/// </summary>
	public interface IRuleBuilder : IPluggable
	{
		/// <summary>
		/// Realiza a inicialização do construdor de regras do sistema
		/// </summary>
		/// <param name="rule">Metadados da regra</param>
		//void Init( Rule rule );

		/// <summary>
		/// Componente que realiza a serialização dos metadados da regra <see cref="Rule"/>
		/// </summary>
		//IDataObjectSerializable<Object> Serializer
		//{ get; }

		/// <summary>
		/// Realiza a construção da regra
		/// </summary>
		/// <param name="builder"></param>
		void BuildOn( ValidatorBuilder builder );
	}

}
